# 对于这一组电影数据，如果我们希望统计电影分类(genre)的情况，应该如何处理数据？
# 思路：重新构造一个全为0的数组，列名为分类，如果某一条数据中分类出现过，就让0变为1

#模仿老师的写法，在page126_3中
#测试发现page126_2自己写的方法比老师的快很多

from matplotlib import pyplot as plt
import pandas as pd
import numpy as np

file_path  ='./IMDB-Movie-Data.csv'

df = pd.read_csv(file_path)

# print(df.head(1))

# print(df['Genre'].head())

#　统计分类的列表
temp_list = df['Genre'].str.split(',').tolist()
#格式： [[],[]]
# 不重复的一组
genre_list = list(set(i for j in temp_list for i in j))

# 构造全为０的数组
zeros_df = pd.DataFrame(np.zeros((df.shape[0], len(genre_list))), columns=genre_list)
# print(zeros_df[:2])

# 给每个电影分类的位置置为１
for i in range(df.shape[0]):
    # temp_list[i] 为列表
    zeros_df.loc[i,temp_list[i]] =1
    #todo 上面这句类似于zeros_df.loc[0,['a','b','d']] = 1
    # a = zeros_df.loc[i,temp_list[i]]
    # print(a)
    # break

# print(zeros_df.head(2))

# 统计每个分类的电影的数量的和
genre_count = zeros_df.sum(axis=0)
# print(genre_count)

# 排序
genre_count = genre_count.sort_values(ascending=False)
# print(genre_count)

# 画图
plt.figure(figsize=(20,8), dpi=80)
# 条形图
_x = genre_count.index
_y = genre_count.values
plt.bar(range(len(_x)),_y,width=0.3,color='orange')
plt.xticks(range(len(_x)),_x,rotation=90)
plt.show()


